package org.juggers.client.ui;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import org.juggers.client.JuggersMessages;
import org.juggers.client.controller.JuggerController;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;

/**
 * Connection panel
 * 
 * @author <a href="mailto:michel@breizhjug.org">Michel DAVID</a>
 */
@Singleton
public class ConnectionPanel
    extends Composite
{

    @Inject
    private Provider<JuggerController> controllerProvider;

    private PasswordTextBox passwordTextBox;

    @Inject
    private ConnectionPanel( JuggersMessages messages )
    {
        FormPanel form = new FormPanel();

        VerticalPanel vPanel = new VerticalPanel();
        form.add( vPanel );

        Label loginLabel = new Label( messages.login() );
        vPanel.add( loginLabel );

        final TextBox loginTextBox = new TextBox();
        vPanel.add( loginTextBox );

        Label passwordLabel = new Label( messages.password() );
        vPanel.add( passwordLabel );

        passwordTextBox = new PasswordTextBox();
        vPanel.add( passwordTextBox );

        final CheckBox rememberMe = new CheckBox( messages.rememberMe() );
        vPanel.add( rememberMe );

        Button submit = new Button( messages.connection() );
        vPanel.add( submit );

        submit.addClickHandler( new ClickHandler()
        {

            @Override
            public void onClick( ClickEvent event )
            {
                controllerProvider.get().login( loginTextBox.getText(), passwordTextBox.getText() );
            }
        } );

        Anchor forgottenPasswordAnchor = new Anchor( messages.forgottenPassword() );
        vPanel.add( forgottenPasswordAnchor );

        forgottenPasswordAnchor.addClickHandler( new ClickHandler()
        {

            @Override
            public void onClick( ClickEvent event )
            {
                controllerProvider.get().showForgottenPassword();
            }
        } );

        Anchor createAccountAnchor = new Anchor( messages.createAccount() );
        vPanel.add( createAccountAnchor );

        createAccountAnchor.addClickHandler( new ClickHandler()
        {

            @Override
            public void onClick( ClickEvent event )
            {
                controllerProvider.get().showRegistration();
            }
        } );

        initWidget( form );
    }

    /**
     * Clear password value
     */
    public void clearPassword()
    {
        passwordTextBox.setText( "" );
    }
}
